﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Ucb.Workshop.WinApp.View.GestionVentas;
using Ucb.Workshop.Dal;
using System.Data.SqlClient;

namespace Ucb.Workshop.WinApp.View.GestionProducto
{
    public partial class ProductoOpc : UserControl
    {
        public ProductoOpc()
        {
            InitializeComponent();
        }
        int cod_provee;

        public int Cod_provee
        {
            get { return cod_provee; }
            set { cod_provee = value; }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            SeleccionarProducto sel = new SeleccionarProducto(this);
            cod_provee = -1;
            sel.ShowDialog();
            if (cod_provee != -1)
            {
                CargarSaldos();
            }
        }
        //private void controlRegistroProducto1_Load(object sender, EventArgs e)
        //{
        //    string consulta = @"SELECT DISTINCT(pv.cod_provee), prov.empresa, prod.descripcion, m.nombre, pv.stock " +
        //                        " FROM provee pv, producto prod,  proveedor prov, marca m " +
        //                            " WHERE pv.cod_producto = prod.cod_producto AND pv.cod_proveedor = prov.cod_proveedor AND pv.cod_marca = m.cod_marca AND pv.stock > 0";

        //    #region consulta gral
        //    cr_proveedor_producto rep = new cr_proveedor_producto();
        //    #endregion
        //    SqlDataAdapter ad = new SqlDataAdapter(consulta, DBManager.conexion());

        //    DataSet ds = new DataSet();
        //    ad.Fill(ds, "DataTable1");
        //    try
        //    {
        //        rep.SetDataSource(ds);
        //        crystalReportViewer1.ReportSource = rep;
        //        crystalReportViewer1.ShowExportButton = true;

        //    }
        //    catch
        //    { }

        //    ad.Dispose();


        //    // Ver Stock minimos
        //    string consulta2 = @"SELECT DISTINCT(pv.cod_provee), prov.empresa, prod.descripcion, m.nombre, pv.stock " +
        //                        " FROM provee pv, producto prod,  proveedor prov, marca m " +
        //                            " WHERE pv.cod_producto = prod.cod_producto AND pv.cod_proveedor = prov.cod_proveedor AND pv.cod_marca = m.cod_marca AND pv.stock = 0";

        //    #region consulta gral
        //    cr_proveedor_producto rep2 = new cr_proveedor_producto();
        //    #endregion
        //    SqlDataAdapter ad2 = new SqlDataAdapter(consulta2, DBManager.conexion());

        //    DataSet ds2 = new DataSet();
        //    ad2.Fill(ds2, "DataTable1");
        //    try
        //    {
        //        rep2.SetDataSource(ds2);
        //        crystalReportViewer2.ReportSource = rep2;
        //        crystalReportViewer2.ShowExportButton = true;

        //    }
        //    catch
        //    { }

        //    ad2.Dispose();
        //}
        public void CargarSaldos()
        {
            DBManager conexion = new DBManager();
            // borramos datos anteriores
            string del = "DELETE FROM saldos";
            conexion.EjecutarConsulta(del);


            string descripcion = "";
            string codigo = "";
            string unidad = "";
            int stock = 0;
            string marca = "";



            // obtenemos las compras
            string consultaCompras = @"SELECT COUNT(dc.cantidad), c.fecha, pr.descripcion, pr.codigo, pr.unidad, pv.stock, m.nombre " +
                                " FROM producto pr, provee pv, proveedor prv, marca m, detalle_compra dc, compra c " +
                                    " WHERE pr.cod_producto = pv.cod_producto AND pv.cod_marca = m.cod_marca AND pv.cod_proveedor = prv.cod_proveedor AND pv.cod_provee = dc.cod_provee AND dc.cod_compra = c.cod_compra AND pv.cod_provee = " + Cod_provee + " " +
                                        " GROUP BY c.fecha, pr.descripcion, pr.codigo, pr.unidad, pv.stock, m.nombre";

            SqlDataReader valoresCompra = conexion.ExeConsulta(consultaCompras);
            if (valoresCompra.HasRows)
            {
                while (valoresCompra.Read())
                {
                    int entrada = valoresCompra.GetInt32(0);
                    DateTime fecha = valoresCompra.GetDateTime(1);
                    descripcion = valoresCompra.GetString(2);
                    codigo = valoresCompra.GetString(3);
                    unidad = valoresCompra.GetString(4);
                    stock = valoresCompra.GetInt32(5);
                    marca = valoresCompra.GetString(6);
                    // Insertamos
                    string consultaEntrada = "INSERT INTO saldos(codigo, descripcion, unidad, stock, marca, fecha, entrada) VALUES('" + codigo + "', '" + descripcion + "', '" + unidad + "', " + stock + ", '" + marca + "', '" + fecha + "', " + entrada + ")";
                    conexion.EjecutarConsulta(consultaEntrada);
                }
            }

            // Creamos las ventas
            string consultaVentas = "SELECT COUNT(dv.cantidad), v.fecha, pr.descripcion, pr.codigo, pr.unidad, pv.stock, m.nombre " +
                                    " FROM producto pr, provee pv, proveedor prv, marca m, detalle_venta dv, venta v " +
                                    " WHERE pr.cod_producto = pv.cod_producto AND pv.cod_marca = m.cod_marca AND pv.cod_proveedor = prv.cod_proveedor AND pv.cod_provee = dv.cod_provee AND dv.cod_venta = v.cod_venta AND pv.cod_provee = " + Cod_provee + " " +
                                    " GROUP BY v.fecha, pr.descripcion, pr.codigo, pr.unidad, pv.stock, m.nombre";
            SqlDataReader valoresVenta = conexion.ExeConsulta(consultaVentas);
            if (valoresVenta.HasRows)
            {
                while (valoresVenta.Read())
                {
                    int salida = valoresVenta.GetInt32(0);
                    DateTime fechaSalida = valoresVenta.GetDateTime(1);
                    // Buscamos una fecha igual de entrada
                    string consultaFecha = "SELECT id_saldos FROM saldos WHERE fecha = '" + fechaSalida + "'";
                    SqlDataReader valorId = conexion.ExeConsulta(consultaFecha);
                    // si encuentra actualizamos
                    if (valorId.HasRows)
                    {
                        while (valorId.Read())
                        {
                            int id_saldos = valorId.GetInt32(0);
                            string consultaUpd = "UPDATE saldos SET salida = " + salida + " WHERE id_saldos =" + id_saldos;
                            conexion.EjecutarConsulta(consultaUpd);
                        }
                    }
                    // Insertamos
                    else
                    {
                        string consultaInsert = "INSERT INTO saldos(codigo, descripcion, unidad, stock, marca, fecha, salida) VALUES('" + codigo + "', '" + descripcion + "', '" + unidad + "', " + stock + ", '" + marca + "', '" + fechaSalida + "', " + salida + ")";
                        conexion.EjecutarConsulta(consultaInsert);
                    }


                }
            }

            // generamos saldos
            int totalSaldo = 0;
            int i = 0;
            string consultaSaldos = "SELECT id_saldos, entrada, salida FROM saldos";
            SqlDataReader valoresSaldos = conexion.ExeConsulta(consultaSaldos);
            if (valoresSaldos.HasRows)
            {
                while (valoresSaldos.Read())
                {
                    int id_saldos = valoresSaldos.GetInt32(0);
                    int e = 0;
                    try
                    {
                        e = valoresSaldos.GetInt32(1);
                    }
                    catch
                    {

                    }

                    int s = 0;
                    try
                    {
                        s = valoresSaldos.GetInt32(2);
                    }
                    catch
                    {
                    }
                    int dif = e - s;
                    if (i == 0)
                        totalSaldo = dif;
                    else
                        totalSaldo = totalSaldo + dif;

                    string upd = "UPDATE saldos SET slado =" + totalSaldo + " WHERE id_saldos =" + id_saldos;
                    conexion.EjecutarConsulta(upd);

                    i++;

                }
            }

            // generamos reporte
            //string consultaReporte = @"SELECT id_saldos, codigo, descripcion, unidad, stock, marca, fecha, entrada, salida, slado " +
            //                   " FROM saldos";

            //cr_saldos rep = new cr_saldos();

            //SqlDataAdapter ad = new SqlDataAdapter(consultaReporte, DBManager.conexion());

            //DataSet ds = new DataSet();
            //ad.Fill(ds, "saldos");
            //try
            //{
            //    rep.SetDataSource(ds);
            //    crystalReportViewer3.ReportSource = rep;
            //    crystalReportViewer3.ShowExportButton = true;


            //}
            //catch
            //{ }

            //ad.Dispose();


        }// fin cargar saldos
    }

}
